//
//  TSCMyCheckUtil.m
//  Tsc_IOS
//
//  Created by Rio on 15-5-15.
//  Copyright (c) 2015年 idream. All rights reserved.
//

#import "TSCSDK.h"

@implementation TSCMyCheckUtil

/**
 * 抽取公共部分，供其他校验方法使用
 *
 * @author Rio
 * @date 2015-05-15
 */
/* private */ + (BOOL) checkWithString:(NSString *)string regexString:(NSString *)regexString {
    // 创建正则表达式
    NSError *error = nil;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexString options:0 error:&error];
    if(error) {
        NSLog(@"[E]%s：正则表达式书写错误！请检查：%@", __FUNCTION__, regexString);
        return false;
    }
    
    // 进行匹配
    NSTextCheckingResult *result = [regex firstMatchInString:string options:0 range:NSMakeRange(0, [string length])];
    if (result) {
        return true;
    } else {
        return false;
    }
}

/**
 * 正则表达式校验
 *
 * @author Rio
 * @date 2015-05-15
 */
+ (BOOL) checkWithString:(NSString *)string regexType:(RegexType)regexType {
    switch (regexType) {
        case RegexTypeId: {
            // 1. 非负整数
            return [self checkWithString:string regexType:RegexTypeNumPositive];
        }
            
        case RegexTypeNumPositive: {
            // 1. 非负整数
            return [self checkWithString:string regexString:@"^[1-9]\\d*$"];
        }
            
        case RegexTypeNumNegative: {
            // 1. 负整数
            return [self checkWithString:string regexString:@"^-(\\d)+$"];
            }
            
        case RegexTypeLoginKey: {
            // 1. 非空字符串
            return ![TSCMyUtil isStringEmpty:string];
        }
            
        case RegexTypeShopName: {
            // 1. 必须都是中文、字母、数字 2. 可以是全角或者半角的括号 3. 不超过60字
            return [self checkWithString:string regexString:@"^([\u4E00-\u9FA5]|[A-Z]|[a-z]|[0-9]|[()（）]){1,60}$"];
        }
            
        case RegexTypeMallName: {
            // 1. 必须都是中文、字母、数字 2. 可以是全角或者半角的括号 3. 不超过60字
            return [self checkWithString:string regexType:RegexTypeShopName];
        }
            
        case RegexTypeFeedback: {
            // 1. 不超过120字
            NSString * string2 = [TSCMyUtil trim:(string)];
            NSInteger length = [string2 length];
            if(length == 0 || length > 120) {
                return false;
            } else {
                return true;
            }
        }
            
        case RegexTypeRate: {
            // 1. 不超过120字
            return [self checkWithString:string regexType:RegexTypeFeedback];
        }
            
        case RegexTypeQA: {
            // 1. 不超过120字
            return [self checkWithString:string regexType:RegexTypeFeedback];
        }
            
        case RegexTypeGoodsClassIds: {
            // 1. 格式为1,3,5（不包含0，末尾无逗号） 2. 不能有相同的ID
            
            // 检查格式
            if ([self checkWithString:string regexString:@"^([1-9][0-9]*){1}(,[1-9][0-9]*)*$"] == false) {
                return false;
            };
            
            // 检查不能选择了一样的商品分类
            NSArray * idArr = [TSCMyUtil explodeString:string delimiter:@","];
            if ([TSCMyUtil hasSameElement:idArr] == true) {
                return false;
            }
        }
            
        case RegexTypeGoodsDesc: {
            // 1. 不超过120字
            return [self checkWithString:string regexType:RegexTypeFeedback];
        }
            
        case RegexTypeLogo: {
            // 1. 非空字符串
            return ![TSCMyUtil isStringEmpty:string];
        }
            
        case RegexTypeFrontPhoto: {
            // 1. 非空字符串
            return ![TSCMyUtil isStringEmpty:string];
        }
            
        case RegexTypePhone: {
            // 1. 固定电话7、8、11、12位，手机11位
            // 注：IOS中需要在^$之间加入括号，但安卓就不用。否则IOS认为7位以上的数字都可以通过校验
            NSString * string2 = [TSCMyUtil trim:string];
            return [self checkWithString:string2 regexString:@"^(\\d{7}|\\d{8}|\\d{11}|\\d{12})$"];
        }
            
        case RegexTypeEmail: {
            // 1 是邮箱地址返回true 不是false
            // 注：用户名、邮箱的校验规则不能相同，否则会出现A的用户名等于B的邮箱的情况，这样，系统就无法识别到底是A用户在登录， 还是B用户在登录了
            
            // 先校验长度
            NSString * string2 = [TSCMyUtil trim:string];
            NSInteger length = [string2 length];
            if(length == 0 || length > 40) {
                return false;
            }
            
            // 再校验格式
            return [self checkWithString:string regexString:@"^\\w+([-\\.]\\w+)*@\\w+([-\\.]\\w+)*\\.\\w+([-\\.]\\w+)*$"];
        }
            
        case RegexTypeUserName: {
            // 1. 必须都是中文、字母、数字、下划线 2. 不超过20字
           // 注：用户名、邮箱的校验规则不能相同，否则会出现A的用户名等于B的邮箱的情况，这样，系统就无法识别到底是A用户在登录，还是B用户在登录了
            return [self checkWithString:string regexString:@"^([\u4E00-\u9FA5]|[A-Z]|[a-z]|[0-9]|_){1,20}$"];
        }
            
        case RegexTypePasswd: {
            // 1. 必须都是字母、数字、特殊字符（~!@#$%^&*._） 2. 6-20字
            return [self checkWithString:string regexString:@"^([A-Z]|[a-z]|[0-9]|~|!|@|#|\\$|%|\\^|&|\\*|\\.|_){6,20}$"];
        }
            
        case RegexTypeUserRole: {
            if ([string isEqualToString:[NSString stringWithFormat:@"%li", DB_USER_ROLE_CUSTOMER]] == NO && [string isEqualToString:[NSString stringWithFormat:@"%li", DB_USER_ROLE_GUIDE]] == NO) {
                return false;
            } else {
                return true;
            }
        }
            
        case RegexTypePrice: {
            // 1. 不能为空 2. 正数
            // 判断是否为空
            if ([TSCMyUtil isStringEmpty:string] == true) {
                return false;
            }
            
            // 先检查是否为数字
            if([self checkWithString:string regexString:@"^\\d+$"] ==false) {
                return false;
            }
            
            // 再检查是否为正数
            if ([self checkWithString:string regexType:RegexTypeNumPositive] == false) {
                return false;
            }
            
            return true;
        }
            
        case RegexTypeDealCode: {
            // 1. 不能为空。因为购物码的规则可能随时会在server端改变，所以不能写在APP端
            return ![TSCMyUtil isStringEmpty:string];
        }
            
        default: {
            NSLog(@"[E]%s：输入了暂不支持的正则表达式类型！", __FUNCTION__);
            return FALSE;
        }
    }
}



@end
